package model

import (
	"errors"
	"gorm.io/gorm"
	"time"
)

type SmFtpConnectInfo struct {
	Id                int64  `json:"id" gorm:"id"`
	FtpInfoId         int64  `json:"ftp_info_id" gorm:"ftp_info_id"`
	FtpWorkCreatedAt  int64  `json:"ftp_work_created_at" gorm:"ftp_work_created_at"` // 服务创建时间
	FtpDirectory      string `json:"ftp_directory" gorm:"ftp_directory"`             // ftp目录
	FtpConnectStatus  int64  `json:"ftp_connect_status" gorm:"ftp_connect_status"`   // ftp连接状态
	FtpConnectTime    int64  `json:"ftp_connect_time" gorm:"ftp_connect_time"`       // ftp连接时间
	FtpDisconnectTime int64  `json:"ftp_disconnect_time" gorm:"ftp_disconnect_time"` // ftp断开时间
	FileDownloadTime  int64  `json:"file_download_time" gorm:"file_download_time"`   // 文件下载时间
	DataUpdatedAt     int64  `json:"data_updated_at" gorm:"data_updated_at"`         // 数据更新时间
	ParsingAt         int64  `json:"parsing_at" gorm:"parsing_at"`                   // 数据解析时间
	UpdatedAt         int64  `json:"updated_at" gorm:"updated_at"`                   // 数据更新时间
	CreatedAt         int64  `json:"created_at" gorm:"created_at"`                   // 添加时间
}

func (SmFtpConnectInfo) TableName() string {
	return "sm_ftp_connect_info"
}

type FtpConnectInfo struct {
	DB               *gorm.DB         `json:"db" gorm:db"`
	SmFtpConnectInfo SmFtpConnectInfo `json:"SmFtpConnectInfo" SmFtpConnectInfo:SmFtpConnectInfo"`
}

func NewFtpConnectInfo() *FtpConnectInfo {
	return &FtpConnectInfo{
		GetDB(),
		SmFtpConnectInfo{},
		//Inject services
	}
}

func (f *FtpConnectInfo) GetConnectInfo(id int64) SmFtpConnectInfo {
	var info = SmFtpConnectInfo{}

	result := f.DB.Model(&SmFtpConnectInfo{}).Where("ftp_info_id = ?", id).First(&info)

	if result.Error != nil {
		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
			// 没有找到记录
			return info
		} else {
			panic(result.Error)
			// 真正的执行错误

		}
	}
	//fmt.Print("条数", result.RowsAffected)
	//fmt.Print("info", info)
	return info
}

// 设定woker 启动时间
func (f *FtpConnectInfo) SaveFtpWorkCreatedTime(id int64) bool {

	now := time.Now()
	unixTime := now.Unix()
	result := f.DB.Model(&SmFtpConnectInfo{}).Where("ftp_info_id = ?", id).Updates(map[string]interface{}{"FtpWorkCreatedAt": unixTime})

	if result.Error != nil {
		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
			// 没有找到记录
			return false
		} else {
			panic(result.Error)
			// 真正的执行错误

		}
	}
	return true
}

// 更新连接时间
func (f *FtpConnectInfo) SaveConnectTime(id int64, status int64) bool {
	now := time.Now()
	unixTime := now.Unix()

	result := f.DB.Model(&SmFtpConnectInfo{}).Where("ftp_info_id = ?", id).Updates(map[string]interface{}{"FtpConnectStatus": status, "FtpDisconnectTime": unixTime})

	if result.Error != nil {
		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
			// 没有找到记录
			return false
		} else {
			panic(result.Error)
			// 真正的执行错误

		}
	}
	return true
}

// 下载文件时间
func (f *FtpConnectInfo) SaveFileDownloadTime(id int64) bool {
	now := time.Now()
	unixTime := now.Unix()
	result := f.DB.Model(&SmFtpConnectInfo{}).Where("ftp_info_id = ?", id).Updates(map[string]interface{}{"FileDownloadTime": unixTime})

	if result.Error != nil {
		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
			// 没有找到记录
			return false
		} else {
			panic(result.Error)
			// 真正的执行错误

		}
	}
	return true
}

// 数据保存时间
func (f *FtpConnectInfo) SaveDataUpdatedTime(id int64, svaeDataStatus bool) bool {
	now := time.Now()
	unixTime := now.Unix()
	var data map[string]interface{}
	if svaeDataStatus {
		data = map[string]interface{}{"DataUpdatedAt": unixTime, "ParsingAt": unixTime}
	} else {
		data = map[string]interface{}{"DataUpdatedAt": unixTime}
	}

	result := f.DB.Model(&SmFtpConnectInfo{}).Where("ftp_info_id = ?", id).Updates(data)
	if result.Error != nil {
		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
			// 没有找到记录
			return false
		} else {
			panic(result.Error)
			// 真正的执行错误

		}
	}
	return true
}

// 更新服务心跳
func (f *FtpConnectInfo) SaveDirectory(id int64, FileD string) bool {
	result := f.DB.Model(&SmFtpConnectInfo{}).Where("ftp_info_id = ?", id).Updates(map[string]interface{}{"ftp_directory": FileD})

	if result.Error != nil {
		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
			// 没有找到记录
			return false
		} else {
			panic(result.Error)
			// 真正的执行错误

		}
	}
	return true
}
